package org.jsola.hr.service;

import org.jsola.core.Page;
import org.jsola.core.service.IService;
import org.jsola.hr.dao.IPolicyCourierTypeDAO;
import org.jsola.hr.dto.PolicyCourierTypeAddDTO;
import org.jsola.hr.dto.PolicyCourierTypeUpdateDTO;
import org.jsola.hr.dto.UpdatePolicySortDTO;
import org.jsola.hr.entity.PolicyCourierTypeDO;
import org.jsola.hr.query.PolicyCourierTypeQuery;
import org.jsola.hr.vo.PolicyCourierTypeListVO;
import org.jsola.hr.vo.PolicyCourierTypeVO;
import org.jsola.user.core.TokenUser;

import java.util.List;


/**
 * 政策速递类型
 *
 * @author zhr
 */
public interface IPolicyCourierTypeService extends IService<IPolicyCourierTypeDAO, PolicyCourierTypeDO> {

    /**
     * 新增政策速递类型
     *
     * @param policyCourierTypeAddDTO 新增政策速递类型DTO
     * @param tokenUser               当前用户
     * @return 政策速递类型详情信息
     */
    PolicyCourierTypeVO save(PolicyCourierTypeAddDTO policyCourierTypeAddDTO, TokenUser tokenUser);

    /**
     * 修改政策速递类型
     *
     * @param policyCourierTypeUpdateDTO 修改政策速递类型DTO
     * @param tokenUser                  当前用户
     * @return 更新数量
     */
    int update(PolicyCourierTypeUpdateDTO policyCourierTypeUpdateDTO, TokenUser tokenUser);


    /**
     * 批量删除政策速递类型，物理删除，更新is_valid字段，从回收站删除
     *
     * @param tokenUser            当前用户
     * @param policyCourierTypeIds 政策速递类型id
     * @return 删除数量
     */
    int deleteByIds(TokenUser tokenUser, String... policyCourierTypeIds);

    /**
     * 根据政策速递类型id查找
     *
     * @param policyCourierTypeId 政策速递类型id
     * @param siteId              所属站点id
     * @return 政策速递类型详情信息
     */
    PolicyCourierTypeVO selectById(String policyCourierTypeId, String siteId);

    /**
     * 查询政策速递类型
     *
     * @param policyCourierTypeQuery 查询条件
     * @param siteId                 所属站点id
     * @return 政策速递类型列表信息
     */
    List<PolicyCourierTypeListVO> select(PolicyCourierTypeQuery policyCourierTypeQuery, String siteId);

    /**
     * 查询政策速递类型记录数
     *
     * @param policyCourierTypeQuery 查询条件
     * @param siteId                 所属站点id
     * @return 政策速递类型记录数
     */
    int selectCount(PolicyCourierTypeQuery policyCourierTypeQuery, String siteId);

    /**
     * 分页查询政策速递类型
     *
     * @param policyCourierTypeQuery 查询条件
     * @param siteId                 所属站点id
     * @return 政策速递类型列表信息
     */
    Page<PolicyCourierTypeListVO> selectPage(PolicyCourierTypeQuery policyCourierTypeQuery, String siteId);


    /**
     * 根据政策速递类型id查找
     *
     * @param policyCourierTypeId 政策速递类型id
     * @param siteId              所属站点id
     * @return 政策速递类型
     */
    PolicyCourierTypeDO selectDOById(String policyCourierTypeId, String siteId);

    /**
     * 查询政策速递类型
     *
     * @param policyCourierTypeQuery 查询条件
     * @param siteId                 所属站点id
     * @return 政策速递类型列表
     */
    List<PolicyCourierTypeDO> selectDO(PolicyCourierTypeQuery policyCourierTypeQuery, String siteId);

    /**
     * 更新政策速递排序
     *
     * @param updateSortList 排序参数
     */
    void updateSort(List<UpdatePolicySortDTO> updateSortList);

    /**
     * 查询租户下所有政策速递类型
     *
     * @param tokenUser 当前用户
     * @return 政策速递类型
     */
    List<PolicyCourierTypeDO> selectTypeBySite(TokenUser tokenUser);
}


